package com.meeting.meetingroom_api.repository;

import com.meeting.meetingroom_api.entity.User;
import com.meeting.meetingroom_api.enums.AccountStatus;
import com.meeting.meetingroom_api.enums.UserRole;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.meeting.meetingroom_api.enums.CustomerApprovalStatus;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Optional;

@Repository
public interface UserRepository extends JpaRepository<User, Integer> {

    Optional<User> findByUsername(String username);

    boolean existsByUsername(String username);

    List<User> findByRole(UserRole role);
    
    // 查询客户角色且 account_status 不为 pending_approval（分页）
    Page<User> findByRoleAndAccountStatusNot(
            UserRole role,
            AccountStatus accountStatus,
            Pageable pageable
    );
    
    // 查询非管理员用户（分页）
    Page<User> findByRoleNotAndAccountStatusNot(UserRole role, AccountStatus accountStatus, Pageable pageable);

    // 按角色查询用户（分页）
    Page<User> findByRole(UserRole role, Pageable pageable);
    
    // 查询特定角色和客户审批状态的用户（支持分页）
    Page<User> findByRoleAndCustomerApprovalStatus(UserRole role, CustomerApprovalStatus customerApprovalStatus, Pageable pageable);
    
    // 查询特定角色和客户审批状态的用户（不分页）
    List<User> findByRoleAndCustomerApprovalStatus(UserRole role, CustomerApprovalStatus customerApprovalStatus);
    
    // 查询特定账户状态的用户（分页）- 排除管理员
    Page<User> findByRoleNotAndAccountStatus(UserRole excludeRole, AccountStatus accountStatus, Pageable pageable);
    
    // 查询特定角色和账户状态的用户（分页）
    Page<User> findByRoleAndAccountStatus(UserRole role, AccountStatus accountStatus, Pageable pageable);
    
    // ==================== 员工审核相关查询方法 ====================
    
    // 查询特定角色和账户状态的用户（不分页）
    List<User> findByRoleAndAccountStatus(UserRole role, AccountStatus accountStatus);
}